Nico Rieck: this patch series fixes visibility issues on Windows as explained in <http://lists.cs.uiuc.edu/pipermail/cfe-dev/2013-August/031214.html>. git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@188192 91177308-0d34-0410-b5e6-96231b3b80d8 
diff --git a/include/iterator b/include/iterator index 858510d..87d6d1d 100644 --- a/include/iterator +++ b/include/iterator 
@@ -333,11 +333,11 @@    _LIBCPP_BEGIN_NAMESPACE_STD   -struct _LIBCPP_TYPE_VIS input_iterator_tag {}; -struct _LIBCPP_TYPE_VIS output_iterator_tag {}; -struct _LIBCPP_TYPE_VIS forward_iterator_tag : public input_iterator_tag {}; -struct _LIBCPP_TYPE_VIS bidirectional_iterator_tag : public forward_iterator_tag {}; -struct _LIBCPP_TYPE_VIS random_access_iterator_tag : public bidirectional_iterator_tag {}; +struct _LIBCPP_TYPE_VIS_ONLY input_iterator_tag {}; +struct _LIBCPP_TYPE_VIS_ONLY output_iterator_tag {}; +struct _LIBCPP_TYPE_VIS_ONLY forward_iterator_tag : public input_iterator_tag {}; +struct _LIBCPP_TYPE_VIS_ONLY bidirectional_iterator_tag : public forward_iterator_tag {}; +struct _LIBCPP_TYPE_VIS_ONLY random_access_iterator_tag : public bidirectional_iterator_tag {};    template <class _Tp>  struct __has_iterator_category @@ -380,11 +380,11 @@  // the client expects instead of failing at compile time.    template <class _Iter> -struct _LIBCPP_TYPE_VIS iterator_traits +struct _LIBCPP_TYPE_VIS_ONLY iterator_traits  : __iterator_traits<_Iter, __has_iterator_category<_Iter>::value> {};    template<class _Tp> -struct _LIBCPP_TYPE_VIS iterator_traits<_Tp*> +struct _LIBCPP_TYPE_VIS_ONLY iterator_traits<_Tp*>  {  typedef ptrdiff_t difference_type;  typedef typename remove_const<_Tp>::type value_type; @@ -415,7 +415,7 @@    template<class _Category, class _Tp, class _Distance = ptrdiff_t,  class _Pointer = _Tp*, class _Reference = _Tp&> -struct _LIBCPP_TYPE_VIS iterator +struct _LIBCPP_TYPE_VIS_ONLY iterator  {  typedef _Tp value_type;  typedef _Distance difference_type; @@ -512,7 +512,7 @@  }    template <class _Iter> -class _LIBCPP_TYPE_VIS reverse_iterator +class _LIBCPP_TYPE_VIS_ONLY reverse_iterator  : public iterator<typename iterator_traits<_Iter>::iterator_category,  typename iterator_traits<_Iter>::value_type,  typename iterator_traits<_Iter>::difference_type, @@ -619,7 +619,7 @@  }    template <class _Container> -class _LIBCPP_TYPE_VIS back_insert_iterator +class _LIBCPP_TYPE_VIS_ONLY back_insert_iterator  : public iterator<output_iterator_tag,  void,  void, @@ -652,7 +652,7 @@  }    template <class _Container> -class _LIBCPP_TYPE_VIS front_insert_iterator +class _LIBCPP_TYPE_VIS_ONLY front_insert_iterator  : public iterator<output_iterator_tag,  void,  void, @@ -685,7 +685,7 @@  }    template <class _Container> -class _LIBCPP_TYPE_VIS insert_iterator +class _LIBCPP_TYPE_VIS_ONLY insert_iterator  : public iterator<output_iterator_tag,  void,  void, @@ -721,7 +721,7 @@    template <class _Tp, class _CharT = char,  class _Traits = char_traits<_CharT>, class _Distance = ptrdiff_t> -class _LIBCPP_TYPE_VIS istream_iterator +class _LIBCPP_TYPE_VIS_ONLY istream_iterator  : public iterator<input_iterator_tag, _Tp, _Distance, const _Tp*, const _Tp&>  {  public: @@ -760,7 +760,7 @@  };    template <class _Tp, class _CharT = char, class _Traits = char_traits<_CharT> > -class _LIBCPP_TYPE_VIS ostream_iterator +class _LIBCPP_TYPE_VIS_ONLY ostream_iterator  : public iterator<output_iterator_tag, void, void, void, void>  {  public: @@ -789,7 +789,7 @@  };    template<class _CharT, class _Traits> -class _LIBCPP_TYPE_VIS istreambuf_iterator +class _LIBCPP_TYPE_VIS_ONLY istreambuf_iterator  : public iterator<input_iterator_tag, _CharT,  typename _Traits::off_type, _CharT*,  _CharT> @@ -860,7 +860,7 @@  {return !__a.equal(__b);}    template <class _CharT, class _Traits> -class _LIBCPP_TYPE_VIS ostreambuf_iterator +class _LIBCPP_TYPE_VIS_ONLY ostreambuf_iterator  : public iterator<output_iterator_tag, void, void, void, void>  {  public: @@ -901,7 +901,7 @@  };    template <class _Iter> -class _LIBCPP_TYPE_VIS move_iterator +class _LIBCPP_TYPE_VIS_ONLY move_iterator  {  private:  _Iter __i;